
Membro Junior

Gruppo:
Socio

Messaggi:
1062 Utente Nr.: 3611 Iscritto il: 04-08-2001 Stato:
offline
.gif)
|
Spiegazione (è tanto che non lo faccio
più, spero di ricordarmi): Le zone di dati compresse
sono divise in blocchi di dimensioni fisse di 8 byte precedute
da un byte di riconoscimento. La compressione è del tipo
"Questo dato non è compresso, stampalo in output così com'è,
se invece e compresso, recupera il byte salto-lunghezza e
ricicla i dati già decompressi". Per riconoscere nei vari
banchi quali dati sono compressi e quali no si usa il
riconoscitore. Questo byte viene scomposto in 8 bit, ad ogni
bit corrisponde un byte non compresso o un byte compresso
salto-lunghezza. Il funzionamento del byte di
riconoscimento in Grandia II è simile a quello di FF7 (con
qualche variazione). Faccio un esempio (almeno evito la
barba di spiegare tutto nei minimi dettagli): Piccola
legenda dei colori: -Blu: Riconoscitore -Nero: Dato
NON compresso -Rosso: Dato compresso 14 2030405060708090 Nota: I dati sono puramente casuali,
affonterò dopo un caso reale. Procediamo per passi.
Sappiamo che 14 è il byte di riconoscimento (è sempre a capo
della sequenza del banco, quindi non ci si può sbagliare).
Come fare ad identificare quali byte dopo sono compressi e
quali no? Semplice, convertendo 14 in binario, quindi verrà
fuori 00010100. Leggiamo questa sequenza da destra verso
sinistra e assegnamo progressivamento ogni byte a ciò che c'è
nel banco dei dati. Abbiamo 0 e 0, quindi due dati non
compressi, poi subito 1, quindi un byte salto-lunghezza, 0
cioè altro dato non compresso, 1 altro dato compresso, quindi
tre 0 cioè ultimi 3 byte non compressi. E i riconoscitori
sono fuori, ora tocca ai byte compressi...
Esempio
preso realmente dai dati: 18 656E2064A0696D70 (Versione testuale: .en
d.imp) L'identificazione già l'ho fatta dai colori, quindi
passo direttamente a farvi capire come funzionano i dati
compressi. In questo caso abbiamo prima 64, dopo A0, però è
meglio lasciarli distinti. Come prima cosa, scomponiamo il
numero in bit, quindi 64 sarà 01100100, separando i primi 6
bit dagli ultimi due, in questo
modo: 011001<->00 Per ricavare il salto prendiamo
i 6 bit a sinistra e riconvertiamo in decimale sommando 1,
dovrebbe uscire 26. Per la lunghezza del recupero invece basta
trasformare le cifre binarie a destra in decimale e sommare 2,
quindi 0+2=2. Ora non resta che saltare indietro di 26 byte
nello stream di output decompresso, copiare 2 byte, spostarsi
alla fine del flusso output e incollare quel che è stato
ripescato. Stesa procedura con A0, 101000<->00, somma
di 2 sui byte di destra. Quindi in questo caso il salto sarà
di 41 con recupero di 2 byte. Il massimo del salto
possibile è 64, il massimo recupero è 5.
Fine (spero di
non aver scritto cappellate, purtroppo andavo di fretta )
NOTA
IMPORTANTISSIMA: I dati compressi non iniziano con
l'inizio del file passato da Mentz, stanno un po' più giù,
quindi c'è necessità di saltare qualcosa per trovare il primo
riconoscitore ed iniziare la decompressione effettiva.
--------------------

Chiuso per
ferie dal 27 Giugno ore 23:00 fino al 18 Luglio ore
14:00. Grazie per l'attesa gentile cliente. Se le
dovesse servire assistenza nel frattempo, si registri e lasci
un messaggio qui. |